<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

/**
 * 在 Laravel 中，应用发送的每一封邮件都可以表示为“可邮寄”类，这些类都存放在 app/Mail 目录。
 * 如果没看到这个目录，别担心，它将会在你使用 make:mail 命令创建第一个可邮寄类时生成：
 *
 * Class OrderShipped
 * @package App\Mail
 *
 */
class OrderShipped extends Mailable
{
    use Queueable, SerializesModels;


    /**
     * 订单实例.
     */
    public $order;

    /**
     * 不过，这次你需要设置数据为 protected 或private 属性，这样，
     * 这些数据就不会在视图中自动生效。然后，当调用 with 方法时，
     * 传递数据数组到该方法以便数据在视图模板中生效：
     */
    protected $order2;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($order)
    {
        /**
         * 数据被设置给公共属性后，将会在视图中自动生效，
         * 所以你可以像在Blade 模板中访问其它数据一样访问它们：
        <div>
        Price: {{ $order->price }}
        </div>
         */
        $this->order = $order;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        /**
         * 如果你想要定义一个纯文本版本的邮件，可以使用 text 方法。和view 方法一样，
         * text 方法接收一个用于渲染邮件内容的模板名，
         * 你既可以定义纯文本消息也可以定义 HTML 消息：
         */
        //    return $this->view('emails.orders.shipped')->text('emails.orders.shipped_plain');

        /**
         * 数据通过 with 方法传递到视图后，将会在视图中自动生效，因此你也可以像在 Blade 模板访问其它数据一样访问传递过来的数据：

        <div>
        Price: {{ $orderPrice }}
        </div>
         */
        return $this->from('grant@etekcity.com')->view('view.name')
            ->with([
                'orderName' => $this->order->name,
                'orderPrice' => $this->order->price,
            ])
            ->attach('/path/to/file',
                [
                    'as' => 'name.pdf',
                    'mime' => 'application/pdf',
                ])
            ->attachData($this->pdf, 'name.pdf', [
                'mime' => 'application/pdf',
            ]);;
        /**
         * 附件

        要添加附件到邮件，可以在可邮寄类的 build 方法中使用 attach 方法。attach 方法接收完整的文件路径作为第一个参数：

        附加文件到消息时，还可以通过传递一个数组作为 attach 方法的第二个参数来指定文件显示名或 MIME 类型：
         */

        /**
         * 原生数据附件

        attachData 方法可用于添加原生的字节字符串作为附件。如果你想在内存中生成 PDF，
         * 并且在不保存到磁盘的情况下将其添加到邮件作为附件，则可以使用该方法。attachData 方法接收数据字节作为第一个参数，
         * 文件名作为第二个参数，可选数组作为第三个参数：
         */

    }
}
